The full order is: Incoming request → Middleware → Guards → Interceptors (pre) → Pipes → Controller handler → Interceptors (post) → Exception Filters. Exception filters also catch exceptions thrown at any earlier stage. Middleware is the only layer that runs before routing and has no knowledge of which handler will be invoked.